package cn.dengta.webapp.user.model;

import java.util.HashMap;
import java.util.Map;

import cn.dengta.common.model.ValueProxy;
import cn.dengta.common.model.ValueProxyImpl;
import cn.dengta.context.model.WesKit;

public enum MsgBizType implements ValueProxyImpl<MsgBizType, String> {
	/** 系统业务所需 */
	BIZ("biz", "系统内置业务"),
	/** 后台或系统发送 */
	MESSAGE("msg", "系统消息"),
	/** 前台注册 */
	REGISTER("register", "注册用户", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 登录 */
	TRY_LOGIN("tryLogin", "登录", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 绑定 */
	BIND("bind", "绑定账号", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 解绑账号 */
	UN_BIND("UnBind", "解绑账号", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 找回登录密码 */
	FIND_PWD("findPwd", "找回登录密码", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 用户进行敏感操作前的身份验证 */
	AUTH("auth", "身份验证", true, true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	/** 提现到账 */
	CASH_ARRIVE("cashArrive", "提现到账", true, true),
	/** 找回青少年模式密码 */
	FIND_TEEN_PWD("findTeenPwd", "找回青少年模式密码", true, "668888", "${code}，有效期5分钟，切勿将验证码告知他人，以防账号被盗，工作人员任何情况下都不会向用户索要验证码。"),
	/** 支付风控 */
	PAY_RISK("payRisk", "支付风控", true, "658866", "您的验证码为：${code}，请于10分钟内填写，若非本人操作，请忽略本信息。"),
	;

	public static final String LIAOYU_SEND_CODE = "您的验证码为{$var}，请确保是本人操作，不要把验证码泄露给其他人。";

	public static final Map<WesKit, String> send_msg_kit_prifix = new HashMap<>();

	static {
		send_msg_kit_prifix.put(WesKit.main, "【聊郁】");
	}

	public final String alias;
	public final String bizName;
	public final boolean required;
	public final boolean sqlSet;
	public final MailTemplate template;
	final ValueProxy<MsgBizType, String> proxy;

	MsgBizType(String alias, String bizName, boolean required, boolean sqlSet, String code, String template) {
		this.alias = alias;
		this.bizName = bizName;
		this.sqlSet = sqlSet;
		this.required = required;
		this.template = new MailTemplate(code, template, bizName);
		this.proxy = new ValueProxy<>(this, alias, bizName);
	}

	MsgBizType(String alias, String bizName, boolean required, String code, String template) {
		this(alias, bizName, required, false, code, template);
	}

	MsgBizType(String alias, String bizName, boolean required) {
		this(alias, bizName, required, false);
	}

	MsgBizType(String alias, String bizName, boolean required, boolean sqlSet) {
		this(alias, bizName, required, sqlSet, null, null);
	}

	MsgBizType(String alias, String bizName) {
		this(alias, bizName, false);
	}

	@Override
	public ValueProxy<MsgBizType, String> getProxy() {
		return proxy;
	}

	public static MsgBizType of(String alias) {
		return BIZ.getValueOf(alias);
	}

	public String getBizAlias() {
		switch (this) {
			case REGISTER:
			case TRY_LOGIN:
				return TRY_LOGIN.alias;
			case FIND_PWD:
			case AUTH:
			case BIND:
			case UN_BIND:
			case FIND_TEEN_PWD:
				return "common";
			default:
				return alias;
		}
	}
}
